iT邦幫忙

2021 iThome 鐵人賽

DAY 24
1
Software Development

透過迷霧,看破一切~~ZOOPARTY 動物園派對桌遊設計系列 第 24

[第二十四隻羊] 迷霧森林舞會XVIII 遊戲角色設定again_final_final

  • 分享至 

  • xImage
  •  

天亮了 昨晚2號玩家死亡

關於迷霧森林故事

顫慄消逝

洛神:昨晚2號玩家被殺死了,邪惡陣營獲勝,可以向我許一個願望,我都會幫助勝利的一方實現
5號:好,Lulu肯請洛神讓森林所有 animals 都忘記我跟8號玩家真實身份是狼人
洛神:好,我答應你
迷霧森林的天空在洛神纖細的手一揮
落下一道紫色閃電,洛神便隨著煙雲消散而去
所有人已經忘記剛剛死去的好人、忘了遊戲的輸贏,兩位底牌為邪惡陣營的狼,從粉紅矩形門框中
與3號、10號勾著肩膀像是朋友般的從方舟甲板上悠然自在地回到舞會現場,失去記憶的阿虎,請 animal 合唱團演奏著藍調曲The Thrill Is Gone

Yes
待續..

動物園派對

那...我們再次調整一下架構(遮臉)
這邊架構實在是有點複雜 但也是一個很好的練習
最後根據昨天列的需求 決定把技能(:skill)抽出來獨立一個table並與villages關聯
原因是因為技能不只是要記住有什麼技能
對技能的需求我們也在這編列一下

  • 遊戲角色可以同時擁有兩種以上的技能
  • 遊戲角色可以交換技能
  • 技能有特定的使用時機
  • 有些技能有使用次數限制
  • 有些技能每回合都可以使用
  • 有些技能會因為其他技能的發動造成無法使用

因應上面這些條件 最後還是要處理技能能不能倍的用的判段
所以我們還是將技能抽象化出來
這樣同時更符合策略模式
也就是技能可以共用與封裝到每個遊戲角色身上
先創建一個新的model

$ rails g model skill
/models/skill.rb

class Skill < ApplicationRecord
  belongs_to :village

  PERIODS = %w(once every_day every_night first_night)
  enum period: PERIODS

  TREES = %w(prophet potion antidote gun shield knife)
  enum tree: TREES
end

建立關聯
每個村莊裡的遊戲角色可以有很多技能

/models/village.rb
class Village < ApplicationRecord
  has_many :games
  has_many :seats, through: :games
  has_many :skills
  ...

因為還是沒有commit(遮臉)
然後再將db還原

$ bundle exec rake db:rollback
$ bundle exec rake db:rollback

並修正db的資料結構

class CreateVillages < ActiveRecord::Migration[6.1]
  def change
    create_table :villages do |t|
      t.string :title
      t.string :skill_tree_ids, default: [], array: true
      t.integer :role
      t.integer :party

      t.timestamps
    end
  end
end

對應上面的需求先暫時新增四個欄位,其中一個對應到遊戲角色(:village)

class CreateSkills < ActiveRecord::Migration[6.1]
  def change
    create_table :skills do |t|
      t.boolean :available, default: true
      t.integer :tree
      t.integer :period
      t.references :village, null: false, foreign_key: true
      t.timestamps
    end
  end
end

然後我們建立一個公版的rake task

/app/libs/tasks/default_roles.rake

namespace :default_role do
  desc "Create villager role template"
  task generate_villager: :environment do
    Village.create(title:'村民', role: 0, party: 0)
    Village.create(title:'預言家', role: 1, party: 0)
    Village.create(title:'女巫', role: 2, party: 0)
    Village.create(title:'獵人', role: 3, party: 0)
    Village.create(title:'守衛', role: 4, party: 0)
    Village.create(title:'狼王', role: 5, party: 1)
    Village.create(title:'小狼', role: 6, party: 1)
  end
end

在cli上跑起來

$ bundle exec rake default_role:generate

這樣我們就設定好了第一個板子全部的遊戲角色了
https://ithelp.ithome.com.tw/upload/images/20211009/20131155r5HxhBNsMv.png

阿虎每日選幣

$reef 過 $0.02375後起飛

天黑請閉眼


上一篇
[第二十三隻羊] 迷霧森林舞會XVII 玩家x座位x遊戲角色 多對多關聯
下一篇
[第二十五隻羊] 迷霧森林舞會XIV 房間介面調整
系列文
透過迷霧,看破一切~~ZOOPARTY 動物園派對桌遊設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言